<?php
set_time_limit(0);
$ftpInfo = unserialize($_REQUEST['ftp']); 
$fileArray = unserialize($_REQUEST['fileArray']);

$log = "ftplog.txt"; //日志文件
$handle = fopen($log, 'a+');

if(!is_array($ftpInfo)){ //连接信息不全
	$msg = "连接信息不全\n";
	fwrite($handle, $msg);
	fclose($handle);
	die();
}else{
	$conn = @ftp_connect($ftpInfo['server'],$ftpInfo['port']);
	fwrite($handle, $msg);
	if(!$conn){ //无法连接服务器
		$msg = "无法连接服务器\n";
		fwrite($handle, $msg);
		fclose($handle);
		die();
	}
	if(!ftp_login($conn, $ftpInfo['user'], $ftpInfo['pass'])){
		//登录失败
		$msg = "登录失败\n";
		ftp_close($conn); //关闭连接
		fwrite($handle, $msg);
		fclose($handle);
		die();
	}
	@ftp_pasv($conn,1); // 打开被动模拟
} //ftp成功连接并登录

//开始上传文件
foreach ($fileArray as $file){
	$res = upFile($conn,$file,$ftpInfo['dir']);
	if(!$res){
		$msg = "上传失败：$file\n";
	}else{
		$msg = "上传成功：$file\n";
		unlink($file); //上传成功后删除文件
	}
	
	fwrite($handle, $msg);
}//文件上传结束

ftp_close($conn); //关闭ftp连接
fclose($handle);  //关闭日志文件

return;

/**
 * 上传文件
 * @param resource $conn 连接信息
 * @param string   $file 文件 
 * @param string   $dir  目录
 * @return boolean
 */
function upFile($conn,$file,$dir='')
{
	if(!file_exists($file)){
		return false;
	}
	if($dir!=''){
		//远程路径
		if(strstr($file, '.')){
			$remoteFile = $dir."/".substr($file, 2);
		}else{
			$remoteFile = $dir."/".$file;
		}
	}else{
		$remoteFile = $file;
	}
	dir_mkdirs($conn,$remoteFile); //生成目录
	$res = @ftp_nb_put($conn,$remoteFile,$file,FTP_BINARY);
	while ($res == FTP_MOREDATA) {
		$res = ftp_nb_continue ($conn);
	}
	if ($res == FTP_FINISHED) {
		return true;
	} elseif ($res == FTP_FAILED) {
		return false;
	}

}


/**
 * 生成目录
 * @param resource $conn 连接信息
 * @param string   $path 路径
 * @return boolean
 */
function dir_mkdirs($conn,$path)
{
	$path_arr  = explode('/',$path);              // 取目录数组
	$file_name = array_pop($path_arr);            // 弹出文件名
	$path_div  = count($path_arr);                // 取层数

	foreach($path_arr as $val)                    // 创建目录
	{
		if(@ftp_chdir($conn,$val) == FALSE)
		{
			$tmp = @ftp_mkdir($conn,$val);
			if($tmp == FALSE)
			{
				return false;
			}
			@ftp_chdir($conn,$val);
		}
	}

	for($i=1;$i<=$path_div;$i++)                  // 回退到根
	{
		@ftp_cdup($conn);
	}
	return true;
}

?>